
/**
 * Universidad del Valle de Guatemala
 * CC2003 Algoritmos y Estructuras de Datos
 * Proyecto 1: Intérprete de LISP --> Lambda LISP
 * @version 2 Septiembre, 2009
 * Integrantes:
 *      @author Julio Chicas, José García, Ernesto Rodríguez, Karen Tojín
 **/
/**
 * Descripción: Clase auxiliar para la definición de funciones con DEFUN
 **/
public class Variable {

    private Object value;
    private String name;
    private boolean settable = true;

    /**
     * Método que devuelve si es settable
     * @return settable
     */
    public boolean getSettable() {
        return settable;
    }

    /**
     * Método que pone un valor a settable
     */
    public void unset() {
        settable = false;
    }

    /**
     * Método que devuelve si el nombre ingresado es igual al nombre de una variable
     * @param nom: Nombre
     * @return Si es igual al nombre ingresado
     */
    public boolean eq(String nom) {
        return name.equals(nom);
    }

    /**
     * Método constructor para una variable
     * @param nom: Nombre de la variable
     * @param val: Su valor
     */
    public Variable(String nom, Object val) {
        value = val;
        name = nom;
    }

    /**
     * Método constructor para una variable
     * @param a: Variable
     */
    public Variable(Variable a) {
        value = a.val();
        name = a.name();
	settable=a.getSettable();
    }

    /**
     * Método que devuelve el nombre de una variable
     * @return Nombre de la variable
     */
    public String name() {
        return name;
    }

    /**
     * Método que devuelve el contenido de una variable
     * @return El valor de la variable
     */
    public Object val() {
        return value;
    }

    /**
     * Método que "settea" el valor de una variable
     * @param v: El valor de la variable
     */
    public void setVal(Object v) {
        value = v;
    }
}
